package com.young.ums.model.enums;

import com.young.common.util.StringUtils;

/**
 * 设备类型
 *
 * @author wangjy
 * @date 2021/10/03 00:23:13
 */
public enum EDeviceTypeEnum {
    /**
     * 安卓
     */
    ANDROID("ANDROID", "安卓", "Android", "android"),
    /**
     * IOS
     */
    IOS("IOS", "IOS", "iPhone", "iPad", "ios"),
    /**
     * windows手机
     */
    WINDOWSPHONE("WINDOWSPHONE", "windows手机", "windowsphone"),
    /**
     * H5
     */
    H5("H5", "H5")
    ;
    /**
     * 类型
     */
    public final String type;
    /**
     * 说明
     */
    public final String text;
    /**
     * 请求user-agent中匹配的关键词
     */
    public final String[] uaKeys;

    /**
     * 匹配设备类型
     * @param agent 请求头的user-agent
     * @return
     */
    public static EDeviceTypeEnum of(String agent) {
        for (EDeviceTypeEnum e : EDeviceTypeEnum.values()) {
            if (e.matchUa(agent)){
                return e;
            }
        }
        return EDeviceTypeEnum.H5;
    }

    /**
     * 匹配ua
     * @param ua
     * @return
     */
    private boolean matchUa(String ua) {
        if (this.uaKeys != null && this.uaKeys.length > 0 && StringUtils.isNotBlank(ua)) {
            for (String key : this.uaKeys) {
                if (ua.contains(key)) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * 判断相等
     * @param type
     * @return true表示相等
     */
    public boolean eq(String type) {
        return this.type.equals(type);
    }

    /**
     * 判断不相等
     * @param type
     * @return true表示不相等
     */
    public boolean notEq(String type) {
        return !this.eq(type);
    }

    EDeviceTypeEnum(String type, String text, String... uaKeys) {
        this.type = type;
        this.text = text;
        this.uaKeys = uaKeys;
    }
}
